package com.chenfan.ccp.plug.rpc.service;

import java.util.List;

public interface NotifyRemoteService {

    /**
     * 根据条件获取消息内容
     */
    void modifyNotify(Long id, Integer notifyProcess, Integer notifyType, Integer messageType,
                      Integer messageProgress);


    default void saveNotify(Long businessId,Integer notifyType, Integer notifyProcess,
                    Long messageType,String messageTypeName,String messageUrl,String jumpUrlType,
                    String message, Long userId, String userName){
        saveNotify(businessId,notifyType, notifyProcess,messageType,messageTypeName,messageUrl,jumpUrlType,message, userId, userName, null, "", "");
    }


    /**
     *
     * @param businessId  业务id
     * @param notifyType  通知类型 参考 MCN_WAIT(1, "待办"), MCN_MSG(2, "通知");
     * @param notifyProcess 通知进度 参考  WAIT(1, "待完成"), IGNORE(2, "忽略"), COMPLETE(3, "完成");
     * @param messageType  消息类型 （折扣审批单枚举）
     * @param messageTypeName 消息类型名 （折扣审批单名称）消息类型 MESSAGE(-1, "消息") REVENUE_CONTRACT(1, "收入合同")
     * @param messageUrl 组件url
     * @param jumpUrlType 跳转方式
     * @param message 消息内容
     * @param userId  用户id
     * @param userName 用户名
     * @param approvalId  非必填
     * @param approvalCode 非必填
     * @param businessCode 业务单据编码 必填
     */
    default void saveNotify(Long businessId,Integer notifyType, Integer notifyProcess,
                    Long messageType,String messageTypeName,String messageUrl,String jumpUrlType,
                    String message, Long userId, String userName,Long approvalId,String approvalCode,
                    String businessCode) {
        saveNotify(businessId, notifyType, notifyProcess, messageType, messageTypeName, messageUrl, jumpUrlType,
                message, userId, userName, approvalId, approvalCode, businessCode, null);
    }

    /**
     *
     * @param businessId  业务id
     * @param notifyType  通知类型 参考 MCN_WAIT(1, "待办"), MCN_MSG(2, "通知");
     * @param notifyProcess 通知进度 参考  WAIT(1, "待完成"), IGNORE(2, "忽略"), COMPLETE(3, "完成");
     * @param messageType  消息类型 （折扣审批单枚举）
     * @param messageTypeName 消息类型名 （折扣审批单名称）消息类型 MESSAGE(-1, "消息") REVENUE_CONTRACT(1, "收入合同")
     * @param messageUrl 组件url
     * @param jumpUrlType 跳转方式
     * @param message 消息内容
     * @param userId  用户id
     * @param userName 用户名
     * @param approvalId  非必填
     * @param approvalCode 非必填
     * @param businessCode 业务单据编码 必填
     */
    void saveNotify(Long businessId,Integer notifyType, Integer notifyProcess,
                    Long messageType,String messageTypeName,String messageUrl,String jumpUrlType,
                    String message, Long userId, String userName,Long approvalId,String approvalCode,
                    String businessCode, Integer messageProgress);
    /**
     * 根据条件获取类型数量
     */
    Integer getCount(Integer notifyProcess, Integer notifyType, Integer messageType,
                     Integer messageProgress);

    /**
     * 根据条件获取消息内容
     *
     * @param notifyProcess   消息的进度  参考  {@link com.chenfan.notify.enums.NotifyProcessEnums}
     * @param notifyType      通知类型 参考 {@link com.chenfan.notify.enums.NotifyTypeEnums }
     * @param messageType     消息类型 参考 {@link com.chenfan.notify.enums.MessageTypeEnums }
     * @param messageProgress 消息进度,根据每个消息的类型不同，自定义进度的类型
     * @param page            页数
     * @param size            每页大小
     * @return
     */
    <T> List<T> getAll(Integer notifyProcess, Integer notifyType, Integer messageType,
                       Integer messageProgress, Integer page, Integer size);


    void approvalFinish(Long approvalId);
}
